home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / utilsys / rss14gmd.lha / RSys_1.4gmd / C / Help.c < prev    next >
C/C++ Source or Header  |  1996-05-04  |  9KB  |  401 lines

  1. /*
  2.    ***************************************************************************
  3.    *
  4.    * Datei:
  5.    *      RSysHelp.c
  6.    *
  7.    * Inhalt:
  8.    *
  9.    *      --- Globale Routinen ---
  10.    *
  11.    *    int CloseHelpOnScreen ( void );
  12.    *    void HandleHelp ( enum RSysNumbers Link );
  13.    *    void Help ( void );
  14.    *    void OpenHelpOnScreen ( int openit );
  15.    *    void ShowStatus ( void );
  16.    *
  17.    *      --- Lokale  Routinen ---
  18.    *
  19.    *    static void DisplayError ( LONG err1 , LONG err2 );
  20.    *    static void HandleAmigaGuide ( void );
  21.    *    static void HandleFirstAmigaGuideMsg ( void );
  22.    *    static void InitAsyncAGuide ( void );
  23.    *    static void RemoveAsyncAGuide ( void );
  24.    *    static void WaitForAGuideActivated ( void );
  25.    *    static void WaitForAGuideCmdReady ( void );
  26.    *
  27.    * Bemerkungen:
  28.    *      Prozeduren zur Verwaltung der Hilfefunktion von RSys.
  29.    *
  30.    * Erstellungsdatum:
  31.    *      07-Jul-93     Rolf Böhme
  32.    *
  33.    * Änderungen:
  34.    *      07-Jul-93     Rolf Böhme        Erstellung
  35.    *
  36.    ***************************************************************************
  37.  */
  38.  
  39. #include "RSys.h"
  40. #include "protos.h"
  41.  
  42. /* RSysHelp.c (statische Prototypen) */
  43. static void RemoveAsyncAGuide (void);
  44. static void HandleAmigaGuide (void);
  45. static void DisplayError (LONG err1, LONG err2);
  46. static void WaitForAGuideCmdReady (void);
  47. static void WaitForAGuideActivated (void);
  48. static void HandleFirstAmigaGuideMsg (void);
  49. static void InitAsyncAGuide (void);
  50.  
  51. static NEWAMIGAGUIDE *nag = NULL;
  52. static AMIGAGUIDECONTEXT AmigaGuide_context = NULL;
  53.  
  54. static SCREEN *lasthelpscreen;
  55.  
  56. static TEXT PortName[] = "-AGuide-Port";
  57. static TEXT BaseName[] = "Guide";
  58.  
  59.  
  60. /********************************************************************
  61.  *                                                                  *
  62.  *    ******************** AGuide entfernen ********************    *
  63.  *                                                                  *
  64.  ********************************************************************/
  65.  
  66. static void
  67. RemoveAsyncAGuide (void)
  68. {
  69.   Flags.helpmode = 0;
  70.  
  71.   PrintInfo ("Close AGuide document...", SPEAK, 0);
  72.  
  73.   if (AmigaGuide_context)
  74.     {
  75.       HandleAmigaGuide ();
  76. /*
  77.    GMD
  78.    ExpungeDataBases ((BOOL) TRUE);
  79.  */
  80.  
  81.       CloseAmigaGuide (AmigaGuide_context);
  82.  
  83.       AmigaGuide_context = NULL;
  84.     }
  85.  
  86.   MyFreeVec (nag);
  87.  
  88.   if (AmigaGuideBase)
  89.     CloseLibrary ((LIBRARY *) AmigaGuideBase);
  90.  
  91.   return;
  92. }
  93.  
  94.  
  95.  
  96. /********************************************************************
  97.  *                                                                  *
  98.  *   ******************** AGuide verarbeiten ********************   *
  99.  *                                                                  *
  100.  ********************************************************************/
  101.  
  102. static void
  103. DisplayError (LONG err1, LONG err2)
  104. {
  105. /*
  106.    UBYTE *errstr1 = GetAmigaGuideString (err1);
  107.  
  108.    GMD 
  109.  */
  110.   UBYTE *errstr2 = GetAmigaGuideString (err2);
  111.  
  112.   MyEasyRequest (SysWnd, (UBYTE *) " - AmigaGuide error message",
  113.          (UBYTE *) "Continue",
  114.          (UBYTE *) "Primary Number  : %ld\n"
  115.          "Secondary Error : %s (Nr.: %ld)",
  116.          err1, errstr2, err2);
  117.  
  118.   return;
  119. }
  120.  
  121. static void
  122. HandleAmigaGuide (void)
  123. {
  124.   AMIGAGUIDEMSG *agm;
  125.  
  126.   while (agm = GetAmigaGuideMsg (AmigaGuide_context))
  127.     {
  128.       if (agm->agm_Pri_Ret || agm->agm_Sec_Ret)
  129.     DisplayError (agm->agm_Pri_Ret, agm->agm_Sec_Ret);
  130.  
  131.       ReplyAmigaGuideMsg (agm);
  132.     }
  133.  
  134.   return;
  135. }
  136.  
  137. static void
  138. WaitForAGuideCmdReady (void)
  139. {
  140.   AMIGAGUIDEMSG *agm;
  141.   BYTE out = FALSE;
  142.  
  143.   do
  144.     {
  145.       while (agm = GetAmigaGuideMsg (AmigaGuide_context))
  146.     {
  147.       if (agm->agm_Type == ToolCmdReplyID)
  148.         out = TRUE;
  149.  
  150.       if (agm->agm_Pri_Ret || agm->agm_Sec_Ret)
  151.         DisplayError (agm->agm_Pri_Ret, agm->agm_Sec_Ret);
  152.  
  153.       ReplyAmigaGuideMsg (agm);
  154.     }
  155.     }
  156.   while (!out);
  157.  
  158.   return;
  159. }
  160.  
  161. static void
  162. WaitForAGuideActivated (void)
  163. {
  164.   AMIGAGUIDEMSG *agm;
  165.   BYTE out = FALSE;
  166.  
  167.   do
  168.     {
  169.       while (agm = GetAmigaGuideMsg (AmigaGuide_context))
  170.     {
  171.       if (agm->agm_Type == ActiveToolID)
  172.         out = TRUE;
  173.  
  174.       if (agm->agm_Pri_Ret || agm->agm_Sec_Ret)
  175.         DisplayError (agm->agm_Pri_Ret, agm->agm_Sec_Ret);
  176.  
  177.       ReplyAmigaGuideMsg (agm);
  178.     }
  179.     }
  180.   while (!out);
  181.  
  182.   return;
  183. }
  184.  
  185.  /*
  186.   * HandleFirstAmigaGuideMsg() wartet auf eine AGuide-Nachricht
  187.   * vom Typ ActiveToolID. Ist diese Nachricht angekommen, kann
  188.   * sofort mit entsprechenden Aktionen begonnen werden.
  189.   * Hier wird sofort das AGuide-Window mit dem Main-Node
  190.   * geöffnet.
  191.   */
  192. static void
  193. HandleFirstAmigaGuideMsg (void)
  194. {
  195.   WaitForAGuideActivated ();
  196.  
  197.   if (SetAmigaGuideContext (AmigaGuide_context, (long) MAIN_HELP, NULL))
  198.     SendAmigaGuideContext (AmigaGuide_context, NULL);
  199.  
  200.   if (SysWnd)
  201.     {
  202.       WaitForAGuideCmdReady ();
  203.  
  204.       WaitTOF ();
  205.  
  206.       WindowToFront (SysWnd);
  207.  
  208.       lasthelpscreen = SysWnd->WScreen;
  209.     }
  210.  
  211.   return;
  212. }
  213.  
  214. void
  215. HandleHelp (enum RSysNumbers Link)
  216. {
  217.   if (!Flags.helpmode)
  218.     return;
  219.  
  220.   HandleAmigaGuide ();
  221.  
  222.   if (Link >= 0)
  223.     {
  224.       if (SetAmigaGuideContext (AmigaGuide_context, (long) Link, NULL))
  225.     SendAmigaGuideContext (AmigaGuide_context, NULL);
  226.     }
  227.  
  228.   HandleAmigaGuide ();
  229.  
  230.   return;
  231. }
  232.  
  233.  
  234.  
  235. /********************************************************************
  236.  *                                                                  *
  237.  *  ******************** AGuide installieren ********************   *
  238.  *                                                                  *
  239.  ********************************************************************/
  240.  
  241. static void
  242. InitAsyncAGuide (void)
  243. {
  244.   if (AmigaGuideBase = (AMIGAGUIDEBASE *)
  245.       OpenLibrary ((STRPTR) "amigaguide.library", 33))
  246.     {
  247.       Flags.helpmode = 1;
  248.  
  249.       PrintInfo ("Please wait! Loading AGuide document...", SPEAK, 0);
  250.  
  251.       nag = MyAllocVec (sizeof (NEWAMIGAGUIDE), MEMF_PUBLIC | MEMF_CLEAR, NO_KILL);
  252.       if (nag)
  253.     {
  254.       nag->nag_Lock = NULL;
  255.       nag->nag_Name = RSysFiles.Guide;
  256.       nag->nag_PubScreen = namebuffer;
  257.       nag->nag_ClientPort = PortName;
  258.       nag->nag_BaseName = BaseName;
  259.       nag->nag_Flags = HTF_NOACTIVATE;
  260.       nag->nag_Context = context;
  261.       nag->nag_Client = NULL;
  262.  
  263.       if (AmigaGuide_context = OpenAmigaGuideAsync (nag, NULL))
  264.         {
  265.           SetAmigaGuideContext (AmigaGuide_context, 0L, NULL);
  266.           HandleFirstAmigaGuideMsg ();
  267.         }
  268.     }
  269.       else
  270.     {
  271.       RemoveAsyncAGuide ();
  272.       ErrorHandle ("Alloc NewAmigaGuide", MEMORY_ERR, ALLOC_FAIL, NO_KILL);
  273.     }
  274.     }
  275.  
  276.   return;
  277. }
  278.  
  279.  
  280. /********************************************************************
  281.  *                                                                  *
  282.  *     ******************** AGuide Support ********************     *
  283.  *                                                                  *
  284.  ********************************************************************/
  285.  
  286. void
  287. Help (void)
  288. {
  289.   DisableSysRequest (TRUE);
  290.  
  291.   if (!Flags.helpmode)
  292.     {
  293.       OffMenu (SysWnd, FULLMENUNUM (7, 3, 0));
  294.  
  295.       InitAsyncAGuide ();
  296.  
  297.       /*
  298.        * Iconify() und erneutes Laden der Nodes verbieten
  299.        */
  300.       if (AmigaGuide_context)
  301.     OffMenu (SysWnd, FULLMENUNUM (0, 0, 0));
  302.       else
  303.     OnMenu (SysWnd, FULLMENUNUM (7, 3, 0));
  304.     }
  305.   else
  306.     {
  307.       RemoveAsyncAGuide ();
  308.  
  309.       /*
  310.        * Iconify() und erneutes Laden der Nodes zulassen
  311.        */
  312.       OnMenu (SysWnd, FULLMENUNUM (0, 0, 0));
  313.       OnMenu (SysWnd, FULLMENUNUM (7, 3, 0));
  314.     }
  315.  
  316.   DisableSysRequest (FALSE);
  317.  
  318.   PrintStatistics ();
  319.  
  320.   return;
  321. }
  322.  
  323. int
  324. CloseHelpOnScreen (void)
  325. {
  326.   if (Flags.helpmode && (Scr != lasthelpscreen))
  327.     {
  328.       Help ();
  329.  
  330.       Flags.helpmode = 1;
  331.  
  332.       return TRUE;
  333.     }
  334.  
  335.   return FALSE;
  336. }
  337.  
  338. void
  339. OpenHelpOnScreen (int openit)
  340. {
  341.   if (openit)
  342.     {
  343.       Flags.helpmode = 0;
  344.  
  345.       Help ();
  346.  
  347.       HandleHelp (GD_JumpGad);
  348.     }
  349.  
  350.   return;
  351. }
  352.  
  353.  
  354. void
  355. ShowStatus (void)
  356. {
  357.   long cnt = 0;
  358.   NODE *node;
  359.   char *onoff[] =
  360.   {"OFF", "ON"};
  361.  
  362.   HandleHelp (MN_ShowStatus);
  363.  
  364.   for (node = Libraries.lh_Head; node->ln_Succ; node = node->ln_Succ)
  365.     cnt += CountNodes (&(((RSYS_LIBRARY *) node)->l_functions));
  366.  
  367.   MyEasyRequest (SysWnd, (UBYTE *) " - Status information",
  368.          (UBYTE *) "Ok",
  369.          (UBYTE *) "--- Flags ---\n"
  370.            "Fast mode  : %3s  Sorting       : %3s  Work bar     : %3s\n"
  371.            "Speaking   : %3s  Auto front    : %3s  Mouse window : %3s\n"
  372.            "Topaz font : %3s  Save asking   : %3s  App Icon     : %3s\n"
  373.          "WB Start   : %3s\n"
  374.          "\n--- Memory ---\n"
  375.          "Current entries : %5ld  Max entries    : %5ld\n"
  376.          "Hardware types  : %5ld  Context nodes  : %5ld\n"
  377.          "Library nodes   : %5ld  Function nodes : %5ld\n"
  378.          "Listviewheight  : %5ld\n"
  379.          "\n--- Files ---\n"
  380.          "Hardware data       : %s (%s)\n"
  381.          "Library offset data : %s (%s)\n"
  382.          "Guide file          : %s (%s)\n"
  383.          "Guide context       : %s (%s)\n"
  384.          "Action file         : %s (%s)\n",
  385.          onoff[Flags.fastmode], onoff[Flags.sortmode],
  386.          onoff[Flags.workingbar], onoff[Flags.speakmode],
  387.          onoff[Flags.autofront], onoff[Flags.mousewindow],
  388.          onoff[Flags.sysfont], onoff[Flags.saveasking],
  389.          onoff[Flags.appicon], onoff[Flags.wb_start],
  390.          countentries, maxentries, CNT_DEVELOPER,
  391.        sizeof (context) / sizeof (char *), CountNodes (&Libraries), cnt,
  392.          newlvh,
  393.          RSysFiles.Hardware, (Flags.dummy1 ? "loaded" : "unload"),
  394.          RSysFiles.LibOffsets, (Flags.dummy2 ? "loaded" : "unload"),
  395.          RSysFiles.Guide, (Flags.dummy3 ? "loaded" : "unload"),
  396.            RSysFiles.GuideContext, (Flags.dummy3 ? "loaded" : "unload"),
  397.          RSysFiles.ActionFile, (Actions ? "loaded" : "unload"));
  398.  
  399.   return;
  400. }
  401.